---
title: Operational runbook
summary: Deployment, environment, health, and troubleshooting reference for the UC4 job-invocation host.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-22
---

# Operational runbook

## Hosts covered

| Host project | Deployable | Notes |
| --- | --- | --- |
| `SAIF.Services.WCF.UC4.Host` | `app` | The only host project registering the `UC4Service` service class in this repository |

## Deployment

The build pipeline for this repository runs a web-build template **twice** — once with an internal-facing parameter set and once with an external-facing parameter set — a pattern carried over from the main host's two-variant deployment model. For `SAIF.Services.WCF.UC4.Host`, that two-pass shape does **not** produce two distinct deployable artifacts: there is no `Web.ReleaseExternal.config` transform, no `ReleaseExternal` build configuration, and the pipeline publishes a **single** artifact named `app` regardless of which pass produced it. Both passes are believed to build the same `Web.config`.

| Aspect | Internal-facing pass | External-facing pass |
| --- | --- | --- |
| Build configuration | `$(BuildConfigurationInternal)` (value not resolved in analyzed pipeline YAML) | Same template, external parameter set |
| Config transform applied | None — no `Web.ReleaseExternal.config` exists | None — same as internal pass |
| Published artifact name | `app` | `app` (same name — not distinguished) |
| Distinct deployable output | No — evidence points to one deployable surface despite two pipeline passes* | No — see internal-facing pass |

Because both passes converge on one `Web.config` and one `app` artifact, this runbook treats the host as having **one** deployment surface rather than the "internal/external variant" split documented for the main host. This nuance should not be assumed to apply to any other host in this repository without re-verifying each one's config transforms and pipeline parameters.

## IIS configuration

| Aspect | Value | Source |
| --- | --- | --- |
| Authentication | Windows Authentication: enabled; Anonymous Authentication: enabled | `pipelines/build-vars.UC4.yml` (`IISWindowsAuth: true`, `IISAnonymousAuth: true`), consumed by `pipelines/release.UC4.yml` — not present in `Web.config`, which has no authentication element |
| Activation | ServiceRoute (`Global.asax.cs`) — no `.svc` file | `Global.asax.cs` |
| ASP.NET compatibility | Enabled | `Web.config` |
| Metadata (WSDL) | Published over HTTP GET (no TLS enforced at the binding level) | `Web.config` |

## Environments

| Setting | Purpose | Source |
| --- | --- | --- |
| `uc4.rules` | Per-environment job allow/deny document (JSON), read via the Environment API on every call | `UC4Service.cs` |
| `uc4coreapi.url` | Downstream UC4 service base address, resolved per call | `Uc4Client.cs` |
| `uc4coreapi.schedulejobroute` | Read into `UC4Client` but never referenced afterward — dead configuration read | `Uc4Client.cs` |
| `ApplicationHost` | `appSettings` value (`Web.config`: `entdev01`) used by framework environment-service host resolution* — not read by `UC4Client`, and not part of the outbound `ClientInfo` identity below | `Web.config`* |

No per-environment `Web.config` transforms exist for this host; environment variance is carried entirely by the Environment API settings above, not by file-based configuration.

## Health verification

| Check | How | Expected result |
| --- | --- | --- |
| Service is reachable | Request the WSDL over HTTP GET at the `UC4` route address | WSDL document returned |
| Service can reach downstream | Invoke any operation with a known-allowed job name | A non-empty `UC4Result` is returned |
| Rules document is readable | Invoke any operation for an environment with rule entries | No fault; result reflects the rule outcome |

There is no dedicated health-check endpoint in this host; verification relies on invoking a real or synthetic operation.

## Fault triage

| Symptom | Likely cause | Where to look |
| --- | --- | --- |
| SOAP fault with full exception detail on every call | `includeExceptionDetailInFaults` is enabled — expected on this host | [Faults and error pipeline](faults.md) |
| SOAP fault mentioning `jobName` | Null `jobName` passed to `ExecuteJobWithJsonAndClientId`, `ExecuteJobWithValuesAndClientId`, or `ExecuteJobWithParametersAndClientId` | [Business rules](business-rules.md#br-uc4-004-job-name-must-not-be-null) |
| SOAP fault on every call for one environment | `uc4.rules` document missing or malformed for that environment | [Business rules](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document) |
| SOAP fault only on JSON-parameter operations | Malformed `jsonKeyValuePairs` — parsed before the allow/deny gate | [Business rules](business-rules.md#br-uc4-013-json-parameters-parsed-before-the-allow-deny-gate) |
| Silent empty result, no fault, job never runs | Job blocked by `uc4.rules`; the explanatory message is discarded before it reaches the caller | [Business rules](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation) |
| Fault referencing the downstream client | `uc4coreapi.url` unreachable, misconfigured, or the downstream service itself faulted | [Dependencies](dependencies.md) |

## Logs

| Source | Content | Notes |
| --- | --- | --- |
| `LogService` (via `WcfEnvironmentService`) | `method:{method},jobName:{jobName}` at `INFO` for every invocation | [Business rules](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info) |
| `[LogErrorBehavior]`* | Unhandled-exception logging at the service-behavior level | External implementation, not in this repository — see [Faults and error pipeline](faults.md) |

## Environment configuration

No connection strings or database configuration exist for this host — see [Configuration](configuration.md) and [Dependencies](dependencies.md) for the complete settings catalog. Do not add a connection-string table to this runbook; none applies.

## Error scenarios

| Scenario | Caller-visible outcome | Reference |
| --- | --- | --- |
| Blocked job | Successful, empty `UC4Result` | [Business rules](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation) |
| Any unhandled exception | SOAP fault with full stack trace and exception type | [Tech debt](tech-debt.md) |
| Downstream service unavailable | SOAP fault propagated unchanged; no retry attempted | [Dependencies](dependencies.md) |

## Monitoring and alerting

No dedicated metrics, health probes, or alerting configuration were found for this host in the analyzed source and pipeline files. Operational visibility depends entirely on the `INFO`-level invocation trace and whatever the external `[LogErrorBehavior]`* contributes.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Activation and hosting](activation-hosting.md)
- [Operations](operations.md)
- [Faults and error pipeline](faults.md)
- [Authentication and authorization](authentication-authorization.md)
- [Dependencies](dependencies.md)
- [Configuration](configuration.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Tech debt](tech-debt.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts.

## Sources
- `src/WCF/SAIF.Services.WCF.UC4.Host/Web.config`
- `src/WCF/SAIF.Services.WCF.UC4.Host/Global.asax.cs`
- `pipelines/build-vars.UC4.yml`
- `pipelines/release.UC4.yml`
